package com.lwlk.util.tuple;

public class Tuple {

    public static <T1> Tuple1<T1> with(final T1 arg1) {
        return new Tuple1<>(arg1);
    }

    public static <T1, T2> Tuple2<T1, T2> with(final T1 arg1, final T2 arg2) {
        return new Tuple2<>(arg1, arg2);
    }

    public static <T1, T2, T3> Tuple3<T1, T2, T3> with(final T1 arg1, final T2 arg2, final T3 arg3) {
        return new Tuple3<>(arg1, arg2, arg3);
    }

    public static <T1, T2, T3, T4> Tuple4<T1, T2, T3, T4> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4) {
        return new Tuple4<>(arg1, arg2, arg3, arg4);
    }

    public static <T1, T2, T3, T4, T5> Tuple5<T1, T2, T3, T4, T5> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5) {
        return new Tuple5<>(arg1, arg2, arg3, arg4, arg5);
    }

    public static <T1, T2, T3, T4, T5, T6> Tuple6<T1, T2, T3, T4, T5, T6> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5, final T6 arg6) {
        return new Tuple6<>(arg1, arg2, arg3, arg4, arg5, arg6);
    }

    public static <T1, T2, T3, T4, T5, T6, T7> Tuple7<T1, T2, T3, T4, T5, T6, T7> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5, final T6 arg6, final T7 arg7) {
        return new Tuple7<>(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
    }

    public static <T1, T2, T3, T4, T5, T6, T7, T8> Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5, final T6 arg6, final T7 arg7, final T8 arg8) {
        return new Tuple8<>(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
    }

    public static <T1, T2, T3, T4, T5, T6, T7, T8, T9> Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5, final T6 arg6, final T7 arg7, final T8 arg8, final T9 arg9) {
        return new Tuple9<>(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
    }

    public static <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Tuple10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> with(final T1 arg1, final T2 arg2, final T3 arg3, final T4 arg4, final T5 arg5, final T6 arg6, final T7 arg7, final T8 arg8, final T9 arg9, final T10 arg10) {
        return new Tuple10<>(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
    }
}
